package com.hqyj.service;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hqyj.dao.*;
import com.hqyj.pojo.DayInfo;
import com.hqyj.pojo.ManagerInfo;
import com.hqyj.pojo.UserInfo;
import com.hqyj.pojo.UserSerInfo;
import com.hqyj.util.MdFive;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.text.SimpleDateFormat;
import java.util.*;

@Service//实现ManagerInfoService的接口功能
public class ManagerInfoServiceImpl implements ManagerInfoService {

    //创建一个userInfoDao的实现类对象
    @Autowired(required = false)
    UserInfoDao userInfoDao;
    //创建一个ManagerInfoDao的实现类对象
    @Autowired(required = false)
    ManagerInfoDao managerInfoDao;
    //创建一个UserSerInfoDao的实现类对象
    @Autowired(required = false)
    UserSerInfoDao userSerInfoDao;
    //创建一个ResultInfoDao的实现类对象
    @Autowired(required = false)
    ResultInfoDao resultInfoDao;
    //创建一个 DayInfoDao的实现类对象
    @Autowired(required = false)
    DayInfoDao dayInfoDao;

    //创建加密工具类对象
    @Autowired
    MdFive mdfive;
    //获取发件人邮箱
    @Value("${spring.mail.username}")
    String sendEmail;

    //创建发送邮件对象
    @Autowired
    JavaMailSender javaMailSender;

    //查询经理收到的所有服务请求
    @Override
    public HashMap<String, Object> selectresilt(UserSerInfo ser) {
        HashMap<String, Object> map=new HashMap<String, Object>();
        //1设置分页参数
        PageHelper.startPage(ser.getPage(),ser.getRow());
        //2查询数据库表数据
        List<UserSerInfo> list=new ArrayList<>();

        //判断用户输入的查询条件是否有值
        if(ser.getConValue().equals("")) {
            //空值查询所有
            list=userSerInfoDao.selectresilt(ser);
        }else
        {
            //根据用户选择的查询条件，判断用户需要查询的
            if (ser.getCondition().equals("编号")) {
                //设置用户输入的查询条件
                ser.setSerId(Integer.parseInt(ser.getConValue()));
                System.out.print(ser.getSerId()+"_____________________________________________");
                list = userSerInfoDao.serfindBySerId(ser);
            }  else if (ser.getCondition().equals("服务类型"))
            {
                //服务类型的查询
                ser.setSerType(ser.getConValue());
                list = userSerInfoDao.serfindByserType(ser);
            }else if (ser.getCondition().equals("服务日期")){
                //服务日期的查询
                ser.setSerTime(ser.getConValue());
                list = userSerInfoDao.serfindByserTime(ser);
            }else if (ser.getCondition().equals("是否已读"))
            {
                //服务经理是否已读查询
                ser.setSerRead(ser.getConValue());
                System.out.print(ser.getSerRead()+"_____________________________________________");
                list = userSerInfoDao.serfindByserRead(ser);

            }
            else if (ser.getCondition().equals("客户昵称"))
            {
                //服务经理是否已读查询
                ser.setSerUserNickName(ser.getConValue());
                list = userSerInfoDao.serfindByserUserNick(ser);

            }
            else if (ser.getCondition().equals("客户姓名"))
            {
                //服务经理是否已读查询
                ser.setSerName(ser.getConValue());
                list = userSerInfoDao.serfindByserUserName(ser);

            }
            else if (ser.getCondition().equals("服务时间"))
            {
                //服务经理是否已读查询
                ser.setSerSpendTime(ser.getConValue());
                list = userSerInfoDao.serfindByserRSpend(ser);

            }else {
                //空值查询所有
                list = userSerInfoDao.selectresilt(ser);
            }
        }

        //分页操作
        //3.把查询出来的数据转换成分页对象
        PageInfo<UserSerInfo> page = new PageInfo<UserSerInfo>(list);

        //获取分页的当前页的集合
        map.put("list",page.getList());
        //总条数
        map.put("total",page.getTotal());
        //总页数
        map.put("totalPage",page.getPages());
        //上一页
        if (page.getPrePage()==0){
            map.put("pre",1);
        }else
        {
            map.put("pre",page.getPrePage());
        }
        //下一页,判断下一页的值是否大于等于最后一页
        if (page.getNextPage()==0)
        {
            map.put("next",page.getPages());
        }else {
            map.put("next", page.getNextPage());
        }
        //当前页
        map.put("cur",page.getPageNum());

        return map;
    }

    //根据id查询当前管理员选择的服务
    @Override
    public UserSerInfo selectreByserId(UserSerInfo ser) {
        return userSerInfoDao.selectByserId(ser);
    }

    //管理员接受任务
    @Override
    public String maupService(UserSerInfo ser) {
        ser.setSerRead("是");
        //修改userSerInfo数据
        int num = userSerInfoDao.upService(ser);
        //往result表插入数据
        int re=resultInfoDao.addresult(ser);
        if (re>0) {
            if (num > 0) {
                return "接受任务成功";
            }
        }
        return "接受任务失败";
    }

    @Override
    public HashMap<String, Object> select(UserInfo user) {
        HashMap<String, Object> map=new HashMap<String, Object>();
        //1 设置分页参数
        PageHelper.startPage(user.getPage(),user.getRow());
        //根据用户选择的查询条件，判断用户需要查询的
        List<UserInfo> list =new ArrayList<>();

        //判断用户输入的查询条件是否有值
        if (user.getConValue().equals("")){
            list=userInfoDao.selectd(user);
        }else{
            if (user.getCondition().equals("编号")){
                //设置用户输入的查询条件
                user.setUserId(Integer.parseInt(user.getConValue()));
                list=userInfoDao.findByUserIdd(user);
            }else if(user.getCondition().equals("用户名")){

                user.setUserName(user.getConValue());
                list=userInfoDao.findByUserNamed(user);
            }else{
                list=userInfoDao.selectd(user);
            }
        }

        //3 把查询的数据转换成分页对象
        PageInfo<UserInfo> page = new PageInfo<UserInfo>(list);
        //获取分页的当前页的集合
        map.put("list",page.getList());
        //总条数
        map.put("total",page.getTotal());
        //总页数
        map.put("totalPage",page.getPages());
        //上一页
        if(page.getPrePage()==0){
            map.put("pre",1);
        }else{
            map.put("pre",page.getPrePage());
        }
        //下一页
        //判断下一页的值是否大于等于最后一页
        if(page.getNextPage()==0){
            map.put("next",page.getPages());
        }else{
            map.put("next",page.getNextPage());
        }
        //当前页
        map.put("cur",page.getPageNum());
        return map;
    }
    @Override
    public UserInfo selectByUserId(UserInfo user) {
        return userInfoDao.selectByUserIdd(user);
    }

    @Override
    public String update(UserInfo user) {
        //验证修改的用户名是否重名
        int v=userInfoDao.valNamed(user);
        if(v==0){
            //修改
            int num=userInfoDao.updateSelf(user);
            if(num>0){
                return "修改成功";
            }
        }else{
            return "用户名重名";
        }
        return "修改失败";
    }

    @Override
    public String del(UserInfo user) {
        int num = userInfoDao.dell(user);
        if(num>0){
            return "删除成功";
        }
        return "删除失败";
    }


    //客户关怀
    @Override
    public HashMap<String, Object> sendCode(String email, String emailText) {
        HashMap<String, Object> map = new HashMap<String, Object>();
        try {
            //创建普通邮件对象
            SimpleMailMessage message = new SimpleMailMessage();
            //设置发件人邮箱
            message.setFrom(sendEmail);
            //设置收件人邮箱
            message.setTo(email);
            //设置邮件主题
            message.setSubject("客户关怀");
            //设置邮件正文
            message.setText(emailText);
            //发送邮件
            javaMailSender.send(message);
            //发送成功
            map.put("info","发送成功");
            return map;

        } catch (Exception e) {
            System.out.println("发送邮件时发生异常！");
            e.printStackTrace();
        }
        map.put("info","发送邮件异常");
        return map;
    }

    ////查询管理员信息
    @Override
    public ManagerInfo selectt(ManagerInfo mag) {
        return managerInfoDao.selectmag(mag);
    }

    //保存管理员信息
    @Override
    public String magUpdate(ManagerInfo mag) {
        //判断用户是否重名
        int v=managerInfoDao.selmagName(mag);
        //判断管理员是否存在
        if (v==0) {
                int num = managerInfoDao.updateMagInfo(mag);
                System.out.println(num);
                if (num > 0) {
                    return "保存成功";
                }
            } else {return "用户重名";}
        return "保存失败";
    }

    @Override
    public ManagerInfo selectByManagerId(ManagerInfo manager) {
        return managerInfoDao.selectByManagerId(manager);
    }

    //查询今天生日，且属于当前登录的管理员的客户的个人信息
    @Override
    public HashMap<String, Object> selectUserByBir(UserInfo user) {
        HashMap<String, Object> map=new HashMap<String, Object>();
        //设置分页参数
        PageHelper.startPage(user.getPage(),user.getRow());
        List<UserInfo> list =new ArrayList<>();
        //System.out.println("------"+user.getUserManager());
        //System.out.println("++++++"+user.getUserBir());
        list=userInfoDao.selectUserByBir(user);

        //把查询的数据转换成分页对象
        PageInfo<UserInfo> page = new PageInfo<UserInfo>(list);
        //获取分页的当前页的集合
        map.put("list",page.getList());
        //总条数
        map.put("total",page.getTotal());
        //总页数
        map.put("totalPage",page.getPages());
        //上一页
        if(page.getPrePage()==0){
            map.put("pre",1);
        }else{
            map.put("pre",page.getPrePage());
        }
        //下一页
        //判断下一页的值是否大于等于最后一页
        if(page.getNextPage()==0){
            map.put("next",page.getPages());
        }else{
            map.put("next",page.getNextPage());
        }
        //当前页
        map.put("cur",page.getPageNum());
        return map;
    }

    @Override
    public String updateHead(ManagerInfo manager, HttpServletRequest request) {
        //取出存入session中的id
        HttpSession session = request.getSession();
        ManagerInfo uu = (ManagerInfo) session.getAttribute("mag");
        //存入要修改的id
        manager.setManagerId(uu.getManagerId());
        int num=managerInfoDao.updateHead(manager);
        if(num>0){
            return "保存成功";
        }
        return "保存失败";
    }

    @Override
    public String updatePwd(ManagerInfo manager, HttpServletRequest request) {
        //取出存入session中的密码
        HttpSession session = request.getSession();
        ManagerInfo uu = (ManagerInfo) session.getAttribute("mag");
        String pwd = uu.getManagerPwd();
        //经理输入的旧密码
        String oldPwd = manager.getOldPwd();
        //判断输入的旧密码是否正确
        if (oldPwd.equals(pwd)){
            //经理输入的新密码
            String newPwd = manager.getNewPwd();
            //存入加密后的密码
            uu.setManagerPwd(newPwd);
            int num = managerInfoDao.updatePwd(uu);
            if(num>0){
                return "修改密码成功";
            }
        }else{
            return "旧密码输入不正确";
        }

        return "修改密码失败";
    }

}
